Messaging APIでM5 Atom Liteから直接LINEメッセージを送信
※このページは神奈川工科大学電気電子情報工学科およびホームエレクトロニクス開発学科コミュニケーションロボティクス研究室の平凡なチュートリアルを淡々と示したものです。過度な期待はしないでください。 やってること
マイコン(Atom Lite)をWi-Fi接続してLINEにメッセージを送信
手順:
LINE公式アカウントの作成し、Messaging APIを作成・有効化してアクセストークンを発行
Atom Liteのプログラミング(Wi-Fi接続→Messaging APIにメッセージ送信)
1. はじめに
モノとインターネットとつなぐIoT開発をしていると、マイコンが取得した情報をスマートフォンにお知らせしたいという場面が多々あります。種々の方法がありますが、ここでは手っ取り早くなじみやすい通知方法としてAtom LiteからLINEでお知らせを送る方法を示します。以前はLINE Notifyというサービスを用いてましたが2025年3月でサービス終了となったため、Messaging APIという機能を用いています。はじめての方でもわかるように示していますが、LINE NotifyからMessaging APIに移行したい方の参考にもなるはずです。 ※今回は取り扱わないマイコン等の各種通信については、下記も参考にしてください。
2. Messaging APIを利用したマイコンからの通知方法の概要
https://gyazo.com/5a86fe8a19b92f53e8522a9b69d33816
上図はこれから構築するLINEのMessaging APIサービスを利用した通知の概略です。マイコン(Atom Lite)からWi-Fi接続でMessaging APIにアクセスしLINEアカウントに通知を送ります。Messaging APIはLINEユーザーとの双方向コミュニケーションを可能にする便利な機能です。Messaging APIを利用するには、まず送信元となるLINE公式アカウントを作成し、LINE公式アカウントと紐づけてMessaging APIを立ち上げ、発行されるチャネルアクセスアクセストークンを用いてWEBサービス(ここではマイコン)からアクセスする必要があります。 以下に、手順を示します。
2.1 LINE公式アカウントの作成からチャネルアクセストークン発行までの流れ
table:LINE Official Account ManagerとLINE Developersでの操作
手順 作業内容 設定に使用するサービス 説明
1 LINE公式アカウントの作成 LINE Official Account Manager LINE公式アカウント(送信元)を作る
2 Messaging APIの作成 LINE Official Account Manager 通信するためのAPI設定
3 プロバイダーの作成 LINE Official Account Manager LINE公式アカウントを管理する単位
4 Messaging APIを有効化 LINE Developers チャネルアクセストークンを取得するために必要
5 チャネルアクセストークンの発行 LINE Developers マイコンからメッセージを送るためのAPIキーに相当
6 LINE公式アカウントを友達登録 LINE Developers・LINE 作成したLINE公式アカウントを友達登録
上の表に、LINE公式アカウントの作成からMessaging APIの設定までの流れをまとめました。LINE Official Account ManagerとLINE Developersという2つのサービスをまたがって設定することになるので、少し手続きが煩雑になります。さとやまノートさんの「M5Stackでできること 〜Messaging APIでLINE通知する」にわかりやすくまとまっていますので、そちらを参考にして6までの手続きを進めることを強くおすすめします。(基本的に上の表の順で手続きを進めることができます。この順番でやらないとアカウント作成の手続きがさらに煩雑になるので……。) 2.2 マイコン(Atom Lite)からMessaging APIをたたく
ここでは、2.1で取得したMessaging APIのチャネルアクセストークンを用いてマイコンからLINE通知するプログラムを示します。マイコンにはAtom Liteを用います。Atom LiteはM5Stackシリーズの開発モジュールです。ESP32-PICO-D4を搭載しているのでWi-Fi、Bluetoothが利用できコンパクトで安価なので当研究室ではよく使っています。Atom Liteの使い方の詳細はこちらにありますので参考にしてください。またMessaging APIの詳細は下記にあります。 https://gyazo.com/1a2314f96f9d2fdcf613b3368eab474b
上記はAtom LiteからMessaging APIをテストするためのサンプルコードの流れです。Atom Liteのボタンスイッチを押すと乱数(1から5の整数値)を生成し、その値をLINEで通知します。Atom Lite側でも生成した整数値を確認できるよう、値に応じてLEDの色を表示するようにしてあります(2秒で消灯)。この整数値をセンサ値などに変更すれば、皆さんの思い思いのIoTアプリケーションがつくれるはずです。
下記にArduino IDE用のサンプルコードを示します。
・Wi-Fiの設定(「ssid」と「password」)
・LINE Messaging APIの設定(「token」)
上記の項目を自分の環境にあわせて書き換えれば動作します。
※Atom Liteのスケッチ例がArduino IDEでビルドできる環境が前提です。わからない場合はこちらを参考にしてください。 code:AtomLiteLINENotify.ino
/* Atom LiteからLINEメッセージを送るサンプル(Messaging API対応)by yama 2025.6.2
* - ボタンを押すと乱数(0〜5)をLINEに送信
* - 数値に応じてLEDの色を変更
* - LINE Messaging API を使用(アクセストークンを設定すること)
* -- 「※要書き換え」の行を書き換えること
*/
const char* ssid = "YOUR_SSID"; // Wi-FiのSSID ※要書き換え
const char* password = "YOUR_PASSWORD"; // Wi-Fiのパスワード ※要書き換え
const char* host = "api.line.me"; // LINE Messaging APIのホスト
const char* token = "YOUR_CHANNEL_ACCESS_TOKEN"; // Messaging APIチャネルアクセストークン ※要書き換え
unsigned long displayTime = 0;
int val0;
// LINEメッセージ送信関数
bool line_message(String msg) {
WiFiClientSecure client;
client.setInsecure(); // 証明書チェックを無効化(教材用簡略設定)
if (!client.connect(host, 443)) {
Serial.println("connect error!");
return false;
}
// JSONデータ:送り先とメッセージ
// HTTPリクエストを組み立て
String request = String("") +
"POST /v2/bot/message/broadcast HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Authorization: Bearer " + token + "\r\n" +
"Content-Length: " + String(payload.length()) + "\r\n" +
"Content-Type: application/json\r\n\r\n" +
payload;
client.print(request);
Serial.println("LINE送信 " + msg); return true;
}
void setup() {
M5.begin(true, false, true);
M5.dis.drawpix(0, 0x000000); // LED消灯
Serial.begin(115200);
// Wi-Fi接続
WiFi.begin(ssid, password);
Serial.print("WiFi接続中");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi接続完了!");
M5.dis.drawpix(0, 0xFFFFFF); //LED 白色点灯(接続確認用)
displayTime = millis();
}
void loop() {
M5.update();
// ボタンが押されたとき
if (M5.Btn.wasReleased()) {
val0 = random(6); // 0〜5の乱数を生成
String msg = "乱数の値は " + String(val0) + " です。";
line_message(msg); // LINEにメッセージ送信
displayTime = millis(); // LED表示開始時刻
// 乱数の値に応じてLED色を変更
switch (val0) {
case 1: M5.dis.drawpix(0, 0xFF0000); break; // 赤
case 2: M5.dis.drawpix(0, 0xFFFF00); break; // 黄
case 3: M5.dis.drawpix(0, 0x00FF00); break; // 緑
case 4: M5.dis.drawpix(0, 0x00FFFF); break; // シアン
case 5: M5.dis.drawpix(0, 0x0000FF); break; // 青
default:M5.dis.drawpix(0, 0xFF00FF); break; // マゼンタ(0)
}
}
// ボタン押下から2秒経ったらLEDを消灯
if (millis() - displayTime >= 2000) {
M5.dis.drawpix(0, 0x000000); // LED OFF
}
delay(50);
}
2.3 実行結果
プログラムを書き込んだ後にAtom Liteを電源につなぎ真ん中のボタンを押すと、乱数を一つ生成します。生成した乱数値に応じてLEDが光り、その値をLINEで通知します。
Atom Lite側のLED表示
https://gyazo.com/868bf0634f806f4be1c46f51c6ecb3c7
LINE側の通知
https://gyazo.com/c3e2b0e47a2f23a1fa108267bc8d31d6
https://gyazo.com/71c7de59f100448c29cdb7f29fbd171b